package com.demos.cqp.dnt.dao;

import javax.annotation.Resource;
import javax.inject.Named;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.UserTransaction;

import com.demos.cqp.dnt.domain.Utilisateur;

@DAO
@Named("userDAO")
public class JPAUtilisateurDAO implements UtilisateurDAO {

	// Contexte de type transactionnel
	@PersistenceContext(unitName = "myPU")
	private EntityManager em;

	@Resource
	private UserTransaction ut;

	@Override
	public void enregistrer(Utilisateur user) throws DAOException {

		try {
			ut.begin();
			em.persist(user);
			// ... L'objet est bien devenu persistant même s'il n'est pas
			// réellement
			// persisté

			// insert, update, delete des objets dans le contexte
			// em.flush();

			ut.commit();

		} catch (Exception e) {
			throw new PBTechniqueDAOException("Erreur transaction", e);
		}

	}

	@Override
	public void mettreAJour(Utilisateur user) throws DAOException {
		try {

			ut.begin();
			// Associe l'objet au contexte
			// ...On pousse l'objet dans le contexte de persistance ...
			em.merge(user);
			// ... L'objet est bien devenu persistant même s'il n'est pas
			// réellement
			// persisté

			// insert, update, delete des objets dans le contexte
			// em.flush();

			ut.commit();
		} catch (Exception e) {
			throw new PBTechniqueDAOException("Erreur transaction", e);
		}

	}

	@Override
	public Utilisateur consulter(String login) throws DAOException {
		return em.find(Utilisateur.class, login);
	}

}
